/* SpringUtil.java

{{IS_NOTE
	Purpose:
		
	Description:
		
	History:
		Thu Jun  1 13:53:53     2006, Created by henrichen
}}IS_NOTE

Copyright (C) 2006 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
}}IS_RIGHT
*/
package org.zkoss.spring;

import javax.servlet.ServletContext;

import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.UiException;

/**
 * SpringUtil, a Spring utility.
 *
 * @author henrichen
 * @since 1.0
 */
public class SpringUtil {
	/**
	 * Get the spring application context.
	 */
	public static ApplicationContext getApplicationContext() {
		final Execution exec = Executions.getCurrent();
		if (exec == null) {
			throw new UiException("SpringUtil can be called only under ZK environment!");
		}

		return WebApplicationContextUtils.getRequiredWebApplicationContext((ServletContext) exec.getDesktop().getWebApp().getNativeContext());
	}

	/**
	 * Get the spring bean by the specified name.
	 */
	public static Object getBean(String name) {
		try {
			return getApplicationContext().getBean(name);
		} catch (final NoSuchBeanDefinitionException ex) {
			// ignore
			return null;
		}
	}

	/**
	 * Get the spring bean by the specified name and class.
	 */
	public static <T> T getBean(String name, Class<T> cls) {
		try {
			return getApplicationContext().getBean(name, cls);
		} catch (final NoSuchBeanDefinitionException ex) {
			// ignore
			return null;
		}
	}
}
